/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package isd.inventario.dao;

import isd.general.dao.BaseDAO;
import isd.inventario.modelo.ST_Producto;
import isd.inventario.modelo.ST_ProductoPK;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author lloubiere
 */
@Stateless
public class ST_ProductoDAO extends BaseDAO implements Serializable{
    
    public ST_Producto getProducto(ST_ProductoPK idPK) {
        return getObjeto(ST_Producto.class, idPK);
    }

    public ST_Producto getProductto(String tippro, String artcod){

        ST_ProductoPK idPk = new ST_ProductoPK(tippro, artcod);
        return (ST_Producto) getObjeto(ST_Producto.class, idPk);
    }

    public ST_Producto getProducto(ST_Producto p){

        return getProductto(p.getTippro(), p.getArtcod());
    }

    public List<ST_Producto> getLista() {
        return getLista(ST_Producto.class, true, -1, -1);
    }

    public List<ST_Producto> getLista(int maxResults, int firstResult) {
        return getLista(ST_Producto.class, false, maxResults, firstResult);
    }   
 
    public List<ST_Producto> getProductosByFiltro(Map<String, String> filtro) {
        try {

            String sQuery = "SELECT p FROM ST_Producto p ";
            sQuery += generarStringFiltro(filtro,"p", true);
            sQuery += " ORDER BY p.artcod";

//            System.err.println(sQuery);
            Query q = em.createQuery(sQuery);
            return q.getResultList();

        } catch (Exception e) {

            e.printStackTrace();
            System.err.println("Error al consultar productos");
            return new ArrayList<ST_Producto>();
        }
    }

    public ST_Producto getProductoByFiltro(Map<String, String> filtro) {
        try {

            String sQuery = "SELECT p FROM ST_Producto p ";
            sQuery += generarStringFiltro(filtro,"p", true);
            sQuery += " ORDER BY p.artcod";

//            System.err.println(sQuery);
            Query q = em.createQuery(sQuery);
            q.setMaxResults(1);
            return (ST_Producto) q.getSingleResult();

        } catch (Exception e) {
//            e.printStackTrace();
//            System.err.println("Error al buscar producto");
            return null;
        }
    }

    public List<ST_Producto> getProductos(String sBusqueda, int maxResult) throws Exception {

        String sQuery = "SELECT p FROM ST_Producto p ";
            sQuery += " WHERE p.auditoria.debaja = 'N' ";
            sQuery += " AND (p.artcod LIKE '%"+sBusqueda+"%' OR p.descrp LIKE '%"+sBusqueda+"%')";
            sQuery += " ORDER BY p.artcod";
            
            Query q = em.createQuery(sQuery);
            q.setMaxResults(maxResult);

            return q.getResultList();

    }



    /**

    public List<Componente> getComponentesByProducto(ST_Producto producto) {
        try {
            String sQuery = "SELECT c FROM Componente c "
                    + " WHERE c.productoPrincipal.id = " + producto.getId()
                    + " AND c.productoComponente.rubro1.id <> 28 ";
            return queryList(Componente.class, sQuery);
        }catch(Exception e){
            System.out.println("No se encontraron componentes " + e.getMessage());
            return null;
        }
    }
     */

    /**
    public List<Componente> getProcesosByProducto(ST_Producto producto) {
        try {
            String sQuery = "SELECT c FROM Componente c "
                    + " WHERE c.productoPrincipal.id = " + producto.getId()
                    + "AND c.productoComponente.rubro1.id = 28 ";
            return queryList(Componente.class, sQuery);
        }catch(Exception e){
            System.out.println("No se encontraron procesos " + e.getMessage());
            return null;
        }
    }

    public ST_Producto getProducto(int id) {
        return getObjeto(ST_Producto.class, id);
    }
     */
}
